package main

import (
	"fmt"
	"sort"
)

// 数组
// 01_var 数组变量名 [元素数量]T
func main() {
	var a [3]int
	var b [4]int
	fmt.Println(a)
	fmt.Println(b)
	// 数组的初始化
	// 1.定义时使用初始值列表的方式
	var city = [4]string{"北京", "上海", "广州", "深圳"}
	fmt.Println(city)
	fmt.Println(city[2])
	// 2.编译器推导数组的长度
	var boolArray = [...]bool{true, false, false, true, false}
	fmt.Println(boolArray)
	// 3.使用索引值
	var langArray = [...]string{1: "Golang", 3: "Python", 7: "Java"}
	fmt.Println(langArray)
	fmt.Printf("%T\n", langArray)

	// 数组的遍历
	// 1.for循环
	for i := 0; i < len(city); i++ {
		fmt.Println(city[i])
	}
	// 2.for range遍历
	for index, value := range city {
		fmt.Println(index, value)
	}
	// 只拿值
	for _, value := range city {
		fmt.Println(value)
	}

	// 二维数组 只有外层可以使用...的形式
	cityArray := [4][2]string{
		{"北京", "葫芦岛"},
		{"上海", "重庆"},
		{"杭州", "成都"},
		{"广州", "深圳"},
	}
	fmt.Println(cityArray)
	fmt.Println(cityArray[2][0])
	// 二维数组的遍历
	for _, v1 := range cityArray {
		for _, v2 := range v1 {
			fmt.Println(v2)
		}
	}

	// 数组是值类型
	x := [3]int{1, 2, 3}
	fmt.Println(x)
	f1(x)
	fmt.Println(x)
	y := x
	y[0] = 100
	fmt.Println(y[0])
	// 数组的值没有发生变化

	// 使用内置的sort包对数组var a = [...]int{3, 7, 8, 9, 1}进行排序
	var str = [...]int{3, 7, 8, 9, 1}
	sort.Ints(str[:])
	fmt.Println(str)
}

func f1(a [3]int) {
	a[0] = 100
}
